package com.ittest.controller;

import lombok.extern.log4j.Log4j2;
import org.springframework.mail.SimpleMailMessage;

import javax.mail.*;
import javax.mail.internet.*;
import java.io.File;
import java.io.UnsupportedEncodingException;
import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import java.util.Properties;
import java.util.concurrent.atomic.AtomicInteger;

/**
 * @author TracyYang
 * @Description: 邮件工具类
 * @date 2023/7/22 14:15
 */
@Log4j2
public class MailUtils {

    public static void sendMail(String url,String yxAddress) throws Exception {
        // 1. 配置邮件服务器属性
        Properties props = new Properties();
        props.put("mail.smtp.host", "smtp.163.com");        // 163邮箱SMTP地址
        props.put("mail.smtp.port", "465");                 // 使用TLS端口
        props.put("mail.smtp.auth", "true");                // 启用认证
        props.put("mail.smtp.ssl.enable", true);          // 启用TLS加密


        // 2. 创建会话并认证（关键：使用163邮箱的授权密码）
        Session session = Session.getInstance(props, new Authenticator() {
            protected PasswordAuthentication getPasswordAuthentication() {
                return new PasswordAuthentication(
                        "shenhao2020520@163.com",  // 你的163邮箱账号
                        "TUfzCipgqqadVe6V"       // 163邮箱的授权密码（非登录密码）
                );
            }
        });
        // 3. 构建邮件消息
        Message message = new MimeMessage(session);
        message.setFrom(new InternetAddress("shenhao2020520@163.com")); // 发件人
        message.setRecipients(Message.RecipientType.TO,
                InternetAddress.parse(yxAddress)); // 收件人QQ邮箱
        message.setSubject("降雨信息主题");
        message.setText(new Date()+"之前24小时降雨量总结！");

        // 4. 创建邮件内容（包含附件）
        Multipart multipart = new MimeMultipart();

        // 4.1 添加文本内容
        MimeBodyPart textPart = new MimeBodyPart();
        textPart.setText("请查收每日自动发送的文件附件");
        multipart.addBodyPart(textPart);

        // 4.2 添加文件附件
        MimeBodyPart attachmentPart = new MimeBodyPart();
        File file = new File(url);

        // 验证文件是否存在
        if (!file.exists()) {
            System.err.println("文件不存在: " + url);
            return;
        }

        // 读取文件内容并设置附件
        attachmentPart.attachFile(file);

        // 设置文件名（避免中文乱码）
        String fileName = file.getName();
        attachmentPart.setFileName(MimeUtility.encodeText(fileName));
        multipart.addBodyPart(attachmentPart);

        // 5. 将内容添加到邮件
        message.setContent(multipart);
        //重试机制，先重试5次
        int maxRetries = 20;
        int retryCount = 0;
        boolean success = false;

        while (!success && retryCount < maxRetries) {
            try {
                // 4. 发送邮件
                Transport.send(message);
                System.out.println(yxAddress + "邮件发送成功！");
                success =true;
            } catch (Exception e) {
                // 处理异常
                retryCount++;
                System.out.println(yxAddress +"邮件发送失败！第"+retryCount+"次重试！");
                Thread.sleep(3000);
            }
        }
    }


    //  纯文本
//    public static void sendSimpleEmail(String to,String subject,String text) {
////        定制纯文本邮件信息SimplemaileMassage
//        SimpleMailMessage message = new SimpleMailMessage();
//        message.setFrom(from);//向指定的邮件发送信息
//        message.setTo(to);
//        message.setSubject(subject);
//        message.setText(text);
//        try {
//            //发送邮件
//            mailSender.send(message);
//            System.out.println("纯文本邮件发送成功");
//        }catch (MailException e) {
//            System.out.println("纯文本邮件发送失败"+e.getMessage());
//            e.printStackTrace();
//        }
//    }

}

